<?php
/**
 * Description of importaXLS
 *
 * @author Cristian de Mellos
 */
class ImportaXLS
{
    public function importaArquivo($arquivo)
    {
        require_once 'classes/excel/excel_reader2.php';
        
        $data = new Spreadsheet_Excel_Reader("importacao_excel/".$arquivo);

        /**********************************************************************/
        $podre = array();
        //$data->sheets[0]['numRows']
        for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
            for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
                //echo "\"".$data->sheets[0]['cells'][$i][$j]."\",";
                if ($i == 1)
                {
                    $titulo[$j] = strtolower($data->sheets[0]['cells'][$i][$j]);
                }
                else
                {
                    $podre[($i - 2)][strtolower($titulo[$j])] = $data->sheets[0]['cells'][$i][$j];
                }
            }
        }
        //header('Content-type: text/html; Charset=utf-8');

        $pdo = Conexao::open('bancao_local');
        foreach ($podre as $key => $value)
        {
            $array = $this->cadastrar($value, $pdo);
            echo $array['dados'] . '<br>';
            if ($array['retorno'] == false)
            {
                echo 'Caiu no exception';
                exit;
            }
        }
        echo 'Concluido, tri né!';
        $pdo = NULL;
    }

    function getIdEstado($sigla) {
        $estados = array(
            1 => 'AC', 2 => 'AL', 3 => 'AM',
            4 => 'AP', 5 => 'BA', 6 => 'CE',
            7 => 'DF', 8 => 'ES', 9 => 'GO',
            10 => 'MA', 11 => 'MG', 12 => 'MT',
            13 => 'MS', 14 => 'PA', 15 => 'PB',
            16 => 'PE', 17 => 'PI', 18 => 'PR',
            19 => 'RJ', 20 => 'RN', 21 => 'RO',
            22 => 'RR', 23 => 'RS', 24 => 'SC',
            25 => 'SE', 26 => 'SP', 27 => 'TO',
        );
        $retorno = array_search(strtoupper(trim($sigla)), $estados);
        return ($retorno === false) ? null : $retorno;
    }

    function preparaEncode($array) {
        $array1 = array();
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                $array1 [$key] = preparaEncode($value);
            } else {
                $array1 [mb_convert_encoding(trim(trim($key, "'")), 'UTF-8', 'ISO-8859-1')] = empty($value) ? null : mb_convert_encoding(trim(addslashes(trim($value, "'"))), 'UTF-8', 'ISO-8859-1');
            }
        }
        return $array1;
    }

    function getFantasia($fantasia) {
        return empty($fantasia) ? 'VISITANTE' : $fantasia;
    }

    function getEdicao() {
        return 3;
    }

    function getSoNumeros($valor) {
        return preg_replace('/[^0-9]/', '', $valor);
    }

    function getIdPais($pdo, $pais) {
        try {
//            $sql = "SELECT id_pais FROM cadastros.pais WHERE UPPER(pais_br) like '%" . mb_convert_case($pais, MB_CASE_UPPER, 'UTF8') . "%'";
//
//            $consulta = $pdo->query($sql);
//
//            $pais = $consulta->fetch(PDO::FETCH_ASSOC);
            return empty($pais['id_pais']) ? 33 : $pais['id_pais'];
        } catch (PDOException $e) {
            return 33;
        }
    }

    function FormataCep($cep) {
        $cep = $this->getSoNumeros($cep);
        if (empty($cep)) {
            return;
        } else {
            $cep = str_pad($cep, 8, "0", STR_PAD_LEFT);
            return substr($cep, 0, 5) . "-" . substr($cep, 5, 3);
        }
    }

    function FormataTelefone($telefone,$ddd=00) {
        $telefone = $this->getSoNumeros($telefone);
        $telefone = strlen($telefone) == 8 ? $ddd.$telefone : $telefone;
        if (!empty($telefone)) {
            return '(' . substr($telefone, 0, 2) . ")" . substr($telefone, 2, 4) . '-' . substr($telefone, 6, 4);
        } else {
            return;
        }
    }

    function FormataCnpj($cnpj) {
        $cnpj = $this->getSoNumeros($cnpj);
        if (empty($cnpj)) {
            return;
        } else {
            $cnpj = str_pad($cnpj, 14, "0", STR_PAD_LEFT);
            return substr($cnpj, 0, 2) . "." . substr($cnpj, 2, 3) . "." . substr($cnpj, 5, 3) . "/" . substr($cnpj, 8, 4) . "-" . substr($cnpj, 12, 2);
        }
    }

    function FormataCpf($cpf) {
        $cpf = $this->getSoNumeros($cpf);
        if (!empty($cpf)) {
            $cpf = str_pad($cpf, 11, "0", STR_PAD_LEFT);

            return substr($cpf, 0, 3) . "." . substr($cpf, 3, 3) . "." . substr($cpf, 6, 3) . "-" . substr($cpf, 9, 2);
        } else {
            return;
        }
    }

    function FormataEmail($email){
        $temp = explode(" ",trim($email));
        return $temp[0];
    }

    function cadastrar($visitante, $pdo)
    {
        if ((!empty($visitante['nome'])) && (!empty($visitante['cpf'])) )
        {
            try
            {
                $visitante['cnpj']          = $this->FormataCnpj($visitante['cnpj']);
                $visitante['cpf']           = $this->FormataCpf($visitante['cpf']);
                $visitante['telefone']      = $this->FormataTelefone($visitante['telefone']);
                $visitante['fax']           = $this->FormataTelefone($visitante['fax']);
                $visitante['cep']           = $this->FormataCep($visitante['cep']);
                $visitante['cargo']         = addslashes($visitante['cargo']);
                $visitante['id_estado']     = intval($this->getIdEstado($visitante['estado']));
                $visitante['uf']            = $visitante['estado'];
    //                    $visitante['id_pais']       = empty($visitante['pais']) ? 33 : $this->getIdPais($pdo, $visitante['pais']); //empty($visitante['id_pais']) ? 33 : $visitante['id_pais'];
                $visitante['email']         = $this->FormataEmail($visitante['email']);
                $visitante['razao_social']  = addslashes($visitante['razao_social']);
                $visitante['fantasia']      = addslashes($visitante['fantasia']);
                $visitante['rua']           = addslashes($visitante['rua']);
                $visitante['nome']          = addslashes($visitante['nome']);
                $visitante['cidade']        = addslashes($visitante['cidade']);
                $visitante['estado']        = addslashes($visitante['estado']);
                $visitante['telefone']      = addslashes($visitante['telefone']);
                $visitante['fax']           = addslashes($visitante['fax']);
                $visitante['email']         = addslashes($visitante['email']);
                $visitante['site']          = addslashes($visitante['site']);
                
                $sqlInsert = "
                                INSERT INTO
                                    visitantes ( cpf, nome, cnpj, cargo, fantasia, razao_social, cep, rua, numero, cidade, id_estado, uf, telefone, fax, email, site )
                                VALUES (    '". $visitante['cpf'] ."',
                                            '". $visitante['nome'] ."',
                                            '". $visitante['cnpj'] ."',
                                            '". $visitante['cargo'] ."',
                                            '". $visitante['fantasia'] ."',
                                            '". $visitante['razao_social'] ."',
                                            '". $visitante['cep'] ."',
                                            '". $visitante['rua'] ."',
                                            '". $visitante['numero'] ."',
                                            '". $visitante['cidade'] ."',
                                            '".  $visitante['id_estado'] ."',
                                            '". $visitante['uf'] ."',
                                            '". $visitante['telefone'] ."',
                                            '". $visitante['fax'] ."',
                                            '". $visitante['email'] ."',
                                            '". $visitante['site'] ."' ) ";

                $consultaInsert = $pdo->prepare($sqlInsert);
                $consultaInsert->execute();

                echo " INSERIDO => " . $visitante['cpf'] . " - " . $visitante['nome'] . "<br />" ;
                $retorno['retorno'] = true;
            }
            catch (PDOException $e)
            {
                try
                {
                    $sqlUpdate = "
                                UPDATE
                                    visitantes
                                SET
                                    nome        = '". $visitante['nome'] ."',
                                    cnpj        = '". $visitante['cmpj'] ."',
                                    cargo       = '". $visitante['cargo'] ."',
                                    fantasia    = '". $visitante['fantasia'] ."',
                                    razao_social= '". $visitante['razao_social'] ."',
                                    cep         = '". $visitante['cep'] ."',
                                    rua         = '". $visitante['rua'] ."',
                                    numero      = '". $visitante['numero'] ."',
                                    cidade      = '". $visitante['cidade'] ."',
                                    id_estado   = '". $visitante['id_estado'] ."',
                                    uf          = '". $visitante['uf'] ."',
                                    telefone    = '". $visitante['telefone'] ."',
                                    fax         = '". $visitante['fax'] ."',
                                    email       = '". $visitante['email'] ."',
                                    site        = '". $visitante['site'] ."'
                                WHERE
                                    cpf = '". $visitante['cpf'] ."' ";
                    $consultaUpdate = $pdo->prepare($sqlUpdate);
                    $consultaUpdate->execute();
                    echo " ALTERADO => " . $visitante['cpf'] . " - " . $visitante['nome'] . "<br />" ;
                    $retorno['retorno'] = true;
                }
                catch (PDOException $e)
                {
                    echo "<pre>";
                        print_r ($e);
                        print_r ($visitante);
                    echo "</pre>";

                    // desfaz operações realizadas durante a transação
                    $retorno['retorno'] = false;
                    $retorno['dados'] = 'Caiu no exception';
                    new Excecao($e);
                }
            }
            return $retorno;
        }
        else
        {
            echo "Faltam dados";
            $retorno['retorno'] = false;
            return $retorno;
        }
    }

}
?>
